Emberveil sourcegame/2006Scape Server/src/main/java/com/rs2/net/packets/impl/ChangeAppearance.java
package com.rs2.net.packets.impl;
import com.rs2.game.players.Player;
import com.rs2.net.Packet;
import com.rs2.net.packets.PacketType;
/**
* Change appearance
**/
public class ChangeAppearance implements PacketType {
private static final int[][] MALE_VALUES = { { 0, 8 }, // head
{ 10, 17 }, // jaw
{ 18, 25 }, // torso
{ 26, 31 }, // arms
{ 33, 34 }, // hands
{ 36, 40 }, // legs
{ 42, 43 }, // feet
};
private static final int[][] FEMALE_VALUES = { { 45, 54 }, // head
{ -1, -1 }, // jaw
{ 56, 60 }, // torso
{ 61, 65 }, // arms
{ 67, 68 }, // hands
{ 70, 77 }, // legs
{ 79, 80 }, // feet
};
private static final int[][] ALLOWED_COLORS = { { 0, 11 }, // hair color
{ 0, 15 }, // torso color
{ 0, 15 }, // legs color
{ 0, 5 }, // feet color
{ 0, 7 } // skin color
};
@Override
public void processPacket(final Player player, Packet packet) {
final int gender = packet.readSignedByte();
if (gender != 0 && gender != 1) {
return;
}
final int[] apperances = new int[MALE_VALUES.length]; // appearance values check
for (int i = 0; i < apperances.length; i++) {
int value = packet.readSignedByte();
if (value < (gender == 0 ? MALE_VALUES[i][0] : FEMALE_VALUES[i][0])
|| value > (gender == 0 ? MALE_VALUES[i][1]
: FEMALE_VALUES[i][1])) {
value = gender == 0 ? MALE_VALUES[i][0] : FEMALE_VALUES[i][0];
}
apperances[i] = value;
}
final int[] colors = new int[ALLOWED_COLORS.length]; // color value check
for (int i = 0; i < colors.length; i++) {
int value = packet.readSignedByte();
if (value < ALLOWED_COLORS[i][0] || value > ALLOWED_COLORS[i][1]) {
value = ALLOWED_COLORS[i][0];
}
colors[i] = value;
}
if (player.canChangeAppearance) {
player.playerAppearance[0] = gender; // gender
player.playerAppearance[1] = apperances[0]; // head
player.playerAppearance[2] = apperances[2]; // torso
player.playerAppearance[3] = apperances[3]; // arms
player.playerAppearance[4] = apperances[4]; // hands
player.playerAppearance[5] = apperances[5]; // legs
player.playerAppearance[6] = apperances[6]; // feet
player.playerAppearance[7] = apperances[1]; // beard
player.playerAppearance[8] = colors[0]; // hair colour
player.playerAppearance[9] = colors[1]; // torso colour
player.playerAppearance[10] = colors[2]; // legs colour
player.playerAppearance[11] = colors[3]; // feet colour
player.playerAppearance[12] = colors[4]; // skin colour
player.endCurrentTask();
player.getPacketSender().closeAllWindows();
player.getPlayerAssistant().requestUpdates();
player.canChangeAppearance = false;
}
}
}